/*
 * @lc app=leetcode id=342 lang=javascript
 *
 * [342] Power of Four
 */
/**
 * @param {number} num
 * @return {boolean}
 */
var isPowerOfFour = function(num) {
  // tag: 数论

  // 100
  // 10000
  // 1000000

  // 发现规律：  4的幂次方的二进制表示 1 的位置都是在奇数位（且不在最低位），其他位置都为0

  // 10
  // 100
  // 1000

  // 发现规律：  2的幂次方的特点是最低位之外，其他位置有且仅有一个1

  // 如果满足：
  // 1. 是 2 的幂次方， 就能保证最低位之外，其他位置有且仅有一个1
  // 我们还需要保证
  // 2. 这个1不再偶数位置，一定在奇数位置就行了

  // 我们可以取一个特殊数字，这个特殊数字，奇数位置都是1，偶数位置都是0，然后和这个特殊数字
  // `求与`， 如果等于本身，那么毫无疑问，这个1不再偶数位置，一定在奇数位置
  // 因为如果在偶数位置，`求与`的结果就是0了
  // 特殊的数字：

  // 01010101010101010101010101010101

  if (num === 1) return true;
  if (num < 4) return false;

  if ((num & (num - 1)) !== 0) return false;

  return (num & 0x55555555) === num;
};
